package networking;


import java.net.*;
import java.io.*;
import java.util.*;


/**
 * Diese Klasse enthält die wesentlichen Methoden des Servers. So wird der Server
 * hier gestartet und die Daten des Lesethreads für den Sendethread verarbeitet.
 * 
 * @author Michael
 */
public class Server {
    
    
static int length = 256; // Länge eines Pakets
static byte[] ba;
static LeseThreadServer Lesen;


/**
 * Diese Funktion verpackt die Werte aus dem Array wieder in einen langen String, der dann als Byte zurückgegeben wird.
 * @return 
 */
public static byte[] getPaket(){ 
    String paketInhalt=""+Lesen.getPos()[0];
    for(int i=1;i<Lesen.getPos().length;i++){
        paketInhalt=paketInhalt+";"+Lesen.getPos()[i];
    }
    //Hier müsste noch die Ballposition eingesetzt werden.
    //Bytes aus dem String paketInhalt holen
    ba=paketInhalt.getBytes();
    return ba;
}

/**
 * Diese Methode initialisiert den Server. So wird die Anmeldung durchgeführt.
 * Wenn sich alle Spieler angemeldet haben und die Clientliste gefüllt ist, 
 * werden der Sende- und der Lesethread des Servers gestartet.
 * 
 * @param numPlayers
 * @param password
 * @param port 
 */
public void startServer(int numPlayers, String password, int port){
    DatagramPacket packet = new DatagramPacket( new byte[length], length);
    Vector clients = new Vector(); // Liste der Clients
    try {
        DatagramSocket socket = new DatagramSocket(port);
        //Warten auf Spieler und füllen der Clientliste
        while(clients.size()<numPlayers){
            socket.receive(packet);
            InetSocketAddress add = (InetSocketAddress)packet.getSocketAddress();
            // Text aus Paket extrahieren
            String text = new String(packet.getData(), 0, packet.getLength());
            //System.out.println( add +">" + text);
            if( text.equals( password ) ) {
               clients.add(add);
               //System.out.println( "Anzahl Clients: " + clients.size() );
            }
        }
        //Starten der Threads
        LeseThreadServer Lesen = new LeseThreadServer(socket, clients);
        SendeThread Senden = new SendeThread(socket, clients);
    }
    catch( IOException e ) {
        System.err.println( "Ausnahmefehler: " + e );
    }
}
}

